      subroutine interpola(c,nx,nz,c0,nx0,nz0,sizedep,depX,iflag)


      implicit none
      double precision :: xdonoh,zdonoh,px,pz,aux1,aux2
      integer :: ndonoh,i0ini,i0fin,j0ini,j0fin
      integer:: Nx, Nz, Nx0, Nz0  ! nohs do grid nas direcoes x e z
      double precision :: deltax,deltaz,deltaX0,deltaZ0 ! distancia entre os nos nas dirceoes x e z (medida relativa a unidade)
      integer :: i,j
      double precision :: c(nx,nz),c0(nx0,nz0) 

      integer :: sizedep, depX(sizedep,Nx0*Nz0)
      integer :: idonoh,jdonoh,idonoh0,jdonoh0,noh,noh0
      integer :: iflag !< se iflag=1, entra C0 e sai C, se iflag=2, entra C e sai C0

      integer :: cont !< contador

      do noh0=1,Nx0*Nz0
	  idonoh0 = mod(noh0,Nx0)
	  if(idonoh0.eq.0) idonoh0=Nx0
	  jdonoh0 = (noh0-idonoh0)/Nx0 +1

	  if(iflag.eq.2)then
	      c0(idonoh0,jdonoh0) = 0.0d0
	      cont = 0
	  endif

	  do i=1,sizedep
   	      if(depX(i,noh0).ne.0)then
		  noh=depX(i,noh0)
		  idonoh = mod(noh,Nx)
		  if(idonoh.eq.0) idonoh=Nx
		  jdonoh = (noh-idonoh)/Nx +1

		  if(iflag.eq.1)then
		      c(idonoh,jdonoh) = c0(idonoh0,jdonoh0)
		  elseif(iflag.eq.2)then
		      c0(idonoh0,jdonoh0) = c0(idonoh0,jdonoh0) + c(idonoh,jdonoh)
		      cont = cont +1
		  endif

	      endif
	  enddo

	  if(iflag.eq.2)then
	      c0(idonoh0,jdonoh0) = c0(idonoh0,jdonoh0) / dfloat(cont) ! faz a média da propriedade nos nós dentro do quadradinho
	  endif

      enddo


      return
      end subroutine interpola
